package br.com.JZSolution.domineduplex.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class SecurityUtils {
	
	/**
	 * Recebe um arquivo e retorna o seu codigo hash utilizando<br>
	 * o algorito MD5.
	 * @param arquivo: a ser criado o hash
	 * @return codigo hash do arquivo em String
	 * @throws NoSuchAlgorithmException
	 * @throws FileNotFoundException
	 * @throws IOException
	 */
	public static String gerarHashMd5(File arquivo) throws NoSuchAlgorithmException,FileNotFoundException, IOException{
		
		byte[] bytes = new byte[8192];
		byte[] hashCode = null;
		MessageDigest md = MessageDigest.getInstance("MD5");
		FileInputStream fis = new FileInputStream(arquivo);
		
		while(fis.read(bytes) != -1){
			hashCode = md.digest(bytes);	
		}
		
		return bytesToHexString(hashCode);
	}
	/**
	 * Converte um array de bytes para uma string de hexadecimal
	 * @param hashCode, array de bytes
	 * @return String, com bytes convertidos para hexadecimal
	 */
	private static String bytesToHexString(byte[] hashCode){
		
		StringBuffer sb = new StringBuffer();
		
		for (int i = 0; i < hashCode.length; i++) {
		     String hex = Integer.toHexString(0xff & hashCode[i]);
		     if(hex.length()==1) sb.append('0');//completando com zero se necessário
		     sb.append(hex);
		}
		
		return sb.toString();
	}
}
